home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 June / CHIP Haziran 2001.iso / prog / haziran / 19 / setup.exe / data.z / iop480_lib.h < prev    next >
C/C++ Source or Header  |  2001-04-11  |  7KB  |  168 lines

  1. #ifndef _IOP480_LIB_H_
  2. #define _IOP480_LIB_H_
  3.  
  4. #ifdef __KERNEL__
  5.     #include "../../../include/kdstdlib.h"
  6. #endif //__KERNEL__
  7. #include "../../../include/windrvr.h"
  8. #include "../../../samples/shared/pci_regs.h"
  9. #include "../../../samples/shared/bits.h"
  10.  
  11. #ifdef __cplusplus
  12. extern "C" {
  13. #endif
  14.  
  15. // PLX register definitions 
  16. enum {
  17.     IOP480_DEVINIT    = 0x80,
  18.     IOP480_LAS0RR     = 0xa0,
  19.     IOP480_LAS0BA     = 0xa4,
  20.     IOP480_LAS1RR     = 0xa8,
  21.     IOP480_LAS1BA     = 0xac,
  22.     IOP480_EROMRR     = 0xc0,
  23.     IOP480_EROMBA     = 0xc4,
  24.     IOP480_MBOX0      = 0x180,
  25.     IOP480_MBOX1      = 0x184,
  26.     IOP480_MBOX2      = 0x188,
  27.     IOP480_MBOX3      = 0x18c,
  28.     IOP480_MBOX4      = 0x190,
  29.     IOP480_MBOX5      = 0x194,
  30.     IOP480_MBOX6      = 0x198,
  31.     IOP480_MBOX7      = 0x19c,
  32.     IOP480_P2LDBELL   = 0x1a0,
  33.     IOP480_L2PDBELL   = 0x1a4,
  34.     IOP480_PINTSTAT   = 0x1b0,
  35.     IOP480_PINTENB    = 0x1b4,
  36.     IOP480_LINTSTAT   = 0x1b8,
  37.     IOP480_LINTENB    = 0x1bc,
  38.     IOP480_DMA_MODE   = 0x200,
  39.     IOP480_DMA_CSR    = 0x204,
  40.     IOP480_DMA_COUNT  = 0x208,
  41.     IOP480_DMA_PCILADR= 0x20c,
  42.     IOP480_DMA_PCIHADR= 0x218,
  43.     IOP480_DMA_LOCADR = 0x210,
  44.     IOP480_DMA_DPR    = 0x214,
  45.     IOP480_DMA_THRES  = 0x214,
  46. };
  47.  
  48. // PLX specific PCI configuration registers
  49. enum {
  50.     IOP480_VPD_ADDR   = 0x5a,
  51.     IOP480_VPD_DATA   = 0x5c,
  52. };
  53.  
  54. typedef enum
  55. {
  56.     IOP480_DMA_CHANNEL_0 = 0,
  57.     IOP480_DMA_CHANNEL_1 = 1,
  58. } IOP480_DMA_CHANNEL;
  59.  
  60. typedef enum
  61. {
  62.     IOP480_MODE_BYTE   = 0,
  63.     IOP480_MODE_WORD   = 1,
  64.     IOP480_MODE_DWORD  = 2
  65. } IOP480_MODE;
  66.  
  67. typedef enum
  68. {
  69.     IOP480_ADDR_REG     = AD_PCI_BAR0,
  70.     IOP480_ADDR_SPACE0  = AD_PCI_BAR1,
  71.     IOP480_ADDR_SPACE1  = AD_PCI_BAR2,
  72.     IOP480_ADDR_SPACE2  = AD_PCI_BAR3,
  73.     IOP480_ADDR_SPACE3  = AD_PCI_BAR4,
  74.     IOP480_ADDR_SPACE4  = AD_PCI_BAR5,
  75.     IOP480_ADDR_EPROM   = AD_PCI_BAR_EPROM
  76. } IOP480_ADDR;
  77.  
  78. enum { IOP480_RANGE_REG = 0x00000080 };
  79.  
  80. typedef struct IOP480_DMA_STRUCT *IOP480_DMA_HANDLE;
  81.  
  82. typedef struct IOP480_STRUCT *IOP480_HANDLE;
  83.  
  84. typedef struct
  85. {
  86.     DWORD dwCounter;   // number of interrupts received
  87.     DWORD dwLost;      // number of interrupts not yet dealt with
  88.     BOOL fStopped;     // was interrupt disabled during wait
  89.     DWORD dwStatusReg; // value of status register when interrupt occured
  90. } IOP480_INT_RESULT;
  91. typedef void (WINAPI *IOP480_INT_HANDLER)( IOP480_HANDLE hPlx, IOP480_INT_RESULT *intResult);
  92.  
  93. // options for PLX_Open
  94. enum { IOP480_OPEN_USE_INT =   0x1 };
  95.  
  96. DWORD IOP480_CountCards (DWORD dwVendorID, DWORD dwDeviceID);
  97. BOOL IOP480_Open (IOP480_HANDLE *phPlx, DWORD dwVendorID, DWORD dwDeviceID, DWORD nCardNum, DWORD dwOptions);
  98. void IOP480_Close (IOP480_HANDLE hPlx);
  99. BOOL IOP480_IsAddrSpaceActive(IOP480_HANDLE hPlx, IOP480_ADDR addrSpace);
  100. void IOP480_GetPciSlot(IOP480_HANDLE hPlx, WD_PCI_SLOT *pPciSlot);
  101.  
  102. void IOP480_ReadWriteBlockLocal (IOP480_HANDLE hPlx, DWORD dwLocalAddr, PVOID buf, 
  103.                     DWORD dwBytes, BOOL fIsRead, IOP480_MODE mode);
  104. void IOP480_ReadBlockLocal (IOP480_HANDLE hPlx, DWORD dwLocalAddr, PVOID buf, DWORD dwBytes, IOP480_MODE mode);
  105. void IOP480_WriteBlockLocal (IOP480_HANDLE hPlx, DWORD dwLocalAddr, PVOID buf, DWORD dwBytes, IOP480_MODE mode);
  106. BYTE IOP480_ReadByteLocal (IOP480_HANDLE hPlx, DWORD dwLocalAddr);
  107. void IOP480_WriteByteLocal (IOP480_HANDLE hPlx, DWORD dwLocalAddr, BYTE data);
  108. WORD IOP480_ReadWordLocal (IOP480_HANDLE hPlx, DWORD dwLocalAddr);
  109. void IOP480_WriteWordLocal (IOP480_HANDLE hPlx, DWORD dwLocalAddr, WORD data);
  110. DWORD IOP480_ReadDWordLocal (IOP480_HANDLE hPlx, DWORD dwLocalAddr);
  111. void IOP480_WriteDWordLocal (IOP480_HANDLE hPlx, DWORD dwLocalAddr, DWORD data);
  112.  
  113. void IOP480_ReadWriteBlock (IOP480_HANDLE hPlx, DWORD dwOffset, PVOID buf, 
  114.                     DWORD dwBytes, BOOL fIsRead, IOP480_ADDR addrSpace, IOP480_MODE mode);
  115. BYTE IOP480_ReadByte (IOP480_HANDLE hPlx, IOP480_ADDR addrSpace, DWORD dwOffset);
  116. void IOP480_WriteByte (IOP480_HANDLE hPlx, IOP480_ADDR addrSpace, DWORD dwOffset, BYTE data);
  117. WORD IOP480_ReadWord (IOP480_HANDLE hPlx, IOP480_ADDR addrSpace, DWORD dwOffset);
  118. void IOP480_WriteWord (IOP480_HANDLE hPlx, IOP480_ADDR addrSpace, DWORD dwOffset, WORD data);
  119. DWORD IOP480_ReadDWord (IOP480_HANDLE hPlx, IOP480_ADDR addrSpace, DWORD dwOffset);
  120. void IOP480_WriteDWord (IOP480_HANDLE hPlx, IOP480_ADDR addrSpace, DWORD dwOffset, DWORD data);
  121. void IOP480_ReadBlock (IOP480_HANDLE hPlx, DWORD dwOffset, PVOID buf, 
  122.                     DWORD dwBytes, IOP480_ADDR addrSpace, IOP480_MODE mode);
  123. void IOP480_WriteBlock (IOP480_HANDLE hPlx, DWORD dwOffset, PVOID buf, 
  124.                      DWORD dwBytes, IOP480_ADDR addrSpace, IOP480_MODE mode);
  125.  
  126. // interrupt functions
  127. BOOL IOP480_IntIsEnabled (IOP480_HANDLE hPlx);
  128. BOOL IOP480_IntEnable (IOP480_HANDLE hPlx, IOP480_INT_HANDLER funcIntHandler);
  129. void IOP480_IntDisable (IOP480_HANDLE hPlx);
  130.  
  131. // access registers
  132. DWORD IOP480_ReadReg (IOP480_HANDLE hPlx, DWORD dwReg);
  133. void IOP480_WriteReg (IOP480_HANDLE hPlx, DWORD dwReg, DWORD dwData);
  134.  
  135. // access PCI configuration registers
  136. DWORD IOP480_ReadPCIReg(IOP480_HANDLE hPlx, DWORD dwReg);
  137. void IOP480_WritePCIReg(IOP480_HANDLE hPlx, DWORD dwReg, DWORD dwData);
  138.  
  139. // Start DMA to/from card.
  140. // fIsRead - TRUE: read from card to buffer.  FALSE: write from buffer to card
  141. // dwBytes - number of bytes to transfer (must be a multiple of 4)
  142. // mode - local bus width.
  143. // dwLocalAddr - local address on card to write to / read from
  144. // channel - uses channel 0 or 1 of the IOP 480
  145. // buf - the buffer to transfer
  146. IOP480_DMA_HANDLE IOP480_DMAOpen (IOP480_HANDLE hPlx, DWORD dwLocalAddr, PVOID buf, 
  147.     DWORD dwBytes, BOOL fIsRead, IOP480_DMA_CHANNEL dmaChannel);
  148. void IOP480_DMAClose (IOP480_HANDLE hPlx, IOP480_DMA_HANDLE hDma);
  149. void IOP480_DMAStart (IOP480_HANDLE hPlx, IOP480_DMA_HANDLE hDma, BOOL fBlocking);
  150. BOOL IOP480_DMAIsDone (IOP480_HANDLE hPlx, IOP480_DMA_HANDLE hDma);
  151. BOOL IOP480_DMAReadWriteBlock (IOP480_HANDLE hPlx, DWORD dwLocalAddr, PVOID buf, 
  152.     DWORD dwBytes, BOOL fIsRead, IOP480_DMA_CHANNEL dmaChannel);
  153.  
  154. BOOL IOP480_EEPROMReadWord(IOP480_HANDLE hPlx, DWORD dwOffset, PWORD pwData);
  155. BOOL IOP480_EEPROMWriteWord(IOP480_HANDLE hPlx, DWORD dwOffset, WORD wData);
  156. BOOL IOP480_EEPROMReadDWord(IOP480_HANDLE hPlx, DWORD dwOffset, PDWORD pdwData);
  157. BOOL IOP480_EEPROMWriteDWord(IOP480_HANDLE hPlx, DWORD dwOffset, DWORD dwData);
  158. BOOL IOP480_EEPROMValid(IOP480_HANDLE hPlx);
  159.  
  160. // this string is set to an error message, if one occurs
  161. extern CHAR IOP480_ErrorString[];
  162.  
  163. #ifdef __cplusplus
  164. }
  165. #endif
  166.  
  167. #endif
  168.